﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LunarSF.SHomeWorkshop.LunarMarkdownEditor
{
    class DateTimeConverter
    {
        //说真话，找不到最合适的工具类，也不想使用金融方式的数字，所以还是这样最简单了。
        //简单、可靠也挺好，丑就丑点好了。^_^

        public static string YearToCn(int year)
        {
            if (year <= 0) throw new ArgumentOutOfRangeException(nameof(year), "不支持公元 1 年前的年份！");

            return year.ToString().Replace("1", "一").Replace("2", "二").Replace("3", "三").Replace("4", "四")
                .Replace("5", "五").Replace("6", "六").Replace("7", "七").Replace("8", "八")
                .Replace("9", "九").Replace("0", "○");
        }

        public static string MonthToCn(int month)
        {
            if (month >= 1 && month <= 9)
            {
                return month.ToString().Replace("1", "一").Replace("2", "二").Replace("3", "三").Replace("4", "四")
                .Replace("5", "五").Replace("6", "六").Replace("7", "七").Replace("8", "八")
                .Replace("9", "九");
            }

            if (month >= 10 && month <= 12) return "十" + (month - 10).ToString().Replace("1", "一").Replace("2", "二").Replace("3", "三").Replace("4", "四")
                 .Replace("5", "五").Replace("6", "六").Replace("7", "七").Replace("8", "八")
                 .Replace("9", "九").Replace("0", "");

            throw new ArgumentOutOfRangeException(nameof(month), "月份值不在范围内！");
        }

        public static string DayToCn(int day)
        {
            if (day >= 1 && day <= 9)
            {
                return day.ToString().Replace("1", "一").Replace("2", "二").Replace("3", "三").Replace("4", "四")
                .Replace("5", "五").Replace("6", "六").Replace("7", "七").Replace("8", "八")
                .Replace("9", "九");
            }

            if (day >= 10 && day <= 19) return "十" + (day - 10).ToString().Replace("1", "一").Replace("2", "二").Replace("3", "三").Replace("4", "四")
                 .Replace("5", "五").Replace("6", "六").Replace("7", "七").Replace("8", "八")
                 .Replace("9", "九").Replace("0", "");

            if (day >= 20 && day <= 29) return "二十" + (day - 20).ToString().Replace("1", "一").Replace("2", "二").Replace("3", "三").Replace("4", "四")
                 .Replace("5", "五").Replace("6", "六").Replace("7", "七").Replace("8", "八")
                 .Replace("9", "九").Replace("0", "");

            if (day >= 30 && day <= 31) return "三十" + (day - 30).ToString().Replace("1", "一").Replace("2", "二").Replace("3", "三").Replace("4", "四")
                  .Replace("5", "五").Replace("6", "六").Replace("7", "七").Replace("8", "八")
                  .Replace("9", "九").Replace("0", "");

            throw new ArgumentOutOfRangeException(nameof(day), "日期值非法！");
        }

        public static string HourToCn(int hour)
        {
            if (hour >= 0 && hour <= 9)
            {
                return hour.ToString().Replace("1", "一").Replace("2", "二").Replace("3", "三").Replace("4", "四")
                .Replace("5", "五").Replace("6", "六").Replace("7", "七").Replace("8", "八")
                .Replace("9", "九").Replace("0","零");
            }

            if (hour >= 10 && hour <= 19) return "十" + (hour - 10).ToString().Replace("1", "一").Replace("2", "二").Replace("3", "三").Replace("4", "四")
                 .Replace("5", "五").Replace("6", "六").Replace("7", "七").Replace("8", "八")
                 .Replace("9", "九").Replace("0", "");

            if (hour >= 20 && hour <= 23) return "二十" + (hour - 20).ToString().Replace("1", "一").Replace("2", "二").Replace("3", "三").Replace("4", "四")
                 .Replace("5", "五").Replace("6", "六").Replace("7", "七").Replace("8", "八")
                 .Replace("9", "九").Replace("0", "");

            throw new ArgumentOutOfRangeException(nameof(hour), "小时值非法！");
        }

        public static string MinuteOrSecondToCn(int ms)
        {
            if (ms >= 0 && ms <= 9)
            {
                return ms.ToString().Replace("1", "一").Replace("2", "二").Replace("3", "三").Replace("4", "四")
                .Replace("5", "五").Replace("6", "六").Replace("7", "七").Replace("8", "八")
                .Replace("9", "九").Replace("0", "零");
            }

            if (ms >= 10 && ms <= 19) return "十" + (ms - 10).ToString().Replace("1", "一").Replace("2", "二").Replace("3", "三").Replace("4", "四")
                 .Replace("5", "五").Replace("6", "六").Replace("7", "七").Replace("8", "八")
                 .Replace("9", "九").Replace("0", "");

            if (ms >= 20 && ms <= 29) return "二十" + (ms - 20).ToString().Replace("1", "一").Replace("2", "二").Replace("3", "三").Replace("4", "四")
                 .Replace("5", "五").Replace("6", "六").Replace("7", "七").Replace("8", "八")
                 .Replace("9", "九").Replace("0", "");

            if (ms >= 30 && ms <= 39) return "三十" + (ms - 30).ToString().Replace("1", "一").Replace("2", "二").Replace("3", "三").Replace("4", "四")
                 .Replace("5", "五").Replace("6", "六").Replace("7", "七").Replace("8", "八")
                 .Replace("9", "九").Replace("0", "");

            if (ms >= 40 && ms <= 49) return "四十" + (ms - 40).ToString().Replace("1", "一").Replace("2", "二").Replace("3", "三").Replace("4", "四")
                 .Replace("5", "五").Replace("6", "六").Replace("7", "七").Replace("8", "八")
                 .Replace("9", "九").Replace("0", "");

            if (ms >= 50 && ms <= 59) return "五十" + (ms - 50).ToString().Replace("1", "一").Replace("2", "二").Replace("3", "三").Replace("4", "四")
                 .Replace("5", "五").Replace("6", "六").Replace("7", "七").Replace("8", "八")
                 .Replace("9", "九").Replace("0", "");

            throw new ArgumentOutOfRangeException(nameof(ms), "分（或秒）值非法！");
        }
    }
}
